<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>

<head>
<title>RT CORBA</title>
</head>

<body>
<!--  -->
<h1 align="center">Real-Time CORBA</h1>
<p align="center"><i>Last Update October 4, 2000</i></p>
<p align="left">This documents keeps track of the TAO's <a href="#RT Corba Development Status">Real-Time CORBA Development Status</a> , and a description of the <a href="#Release Notes">Release
Notes</a> for our implementation. For any comment or question on a specific aspect of RT CORBA you can contact the responsible as listed in the <a href="#RT Corba Development Status">Real-Time CORBA Development Status</a>,
or you can contact one of us: <a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a>, <a href="mailto:irfan@cs.wustl.edu">Irfan
        Pyrali</a>, <a href="mailto:corsaro@cs.wustl.edu">Angelo
        Corsaro</a>.</p>
<h1 align="center"><a name="RT Corba Development Status">RT Corba Development Status</a></h1>
<p>The scope of this brief document is to keep track of the progress of the
RT-CORBA implementation, and to let the user understand what is already in place
what will be soon available and what will not be supported. <a href="#Table 1 - Status of the feature described in the RT CORBA Spec.">Table
1</a> contains a detailed list of the features that are described by the RT-CORBA
spec. and their status respect to our implementation. <a href="#Table 2 - Feature needed to Enable RT-CORBA">Table
2</a> contains features that are not described in the&nbsp; RT-CORBA spec. but
that are needed to &quot;enable&quot; our RT-CORBA implementation, and at last <a href="#Table 3 - Issue to be shortly addressed">Table
3</a> contains a list of issues that should be addressed soon.</p>
<p>&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 5" align="center"><b><a name="Table 1 - Status of the feature described in the RT CORBA Spec.">Table
1 -</a></b><a name="Table 1 - Status of the feature described in the RT CORBA Spec.">
Status of the feature described in the RT CORBA Spec. </a></p>
<div align="center">
  <center>
  <table border="1" width="663" height="216">
    <tr>
      <td width="236" align="center" height="19"><b>Feature</b></td>
      <td width="151" align="center" height="19"><b>Reference</b></td>
      <td width="115" align="center" height="19"><b>Status</b></td>
      <td width="133" align="center" height="19"><b>&nbsp;Contact</b></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Real-Time ORB</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.1</td>
      <td width="115" align="center" height="1">Done</td>
      <td width="133" align="center" height="1"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="16">Real-Time POA</td>
      <td width="151" align="center" height="16">ptc/99-05-03 sec. 4.2</td>
      <td width="115" align="center" height="16">Done</td>
      <td width="133" align="center" height="16"><a href="mailto:irfan@cs.wustl.edu">Irfan
        Pyrali</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="38">CORBA Priority &amp; Priority
        Mappings</td>
      <td width="151" align="center" height="38">
        <p align="center">ptc/99-05-03 sec. 4.4, sec. 4.5</td>
      <td width="115" align="center" height="38">Done </td>
      <td width="133" align="center" height="38"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="19">Real-Time Current</td>
      <td width="151" align="center" height="19">ptc/99-05-03 sec. 4.6</td>
      <td width="115" align="center" height="19">Done</td>
      <td width="133" align="center" height="19"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="19">Real-Time CORBA Priority Models</td>
      <td width="151" align="center" height="19">ptc/99-05-03 sec. 4.7</td>
      <td width="115" align="center" height="19">Done</td>
      <td width="133" align="center" height="19"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Priority Transforms</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.8</td>
      <td width="115" align="center" height="1">Not Supported </td>
      <td width="133" align="center" height="1">-</td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Mutex Interface</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.9</td>
      <td width="115" align="center" height="1">Not Supported </td>
      <td width="133" align="center" height="1">-</td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Thread Pools</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.10</td>
      <td width="115" align="center" height="1">Due - ???</td>
      <td width="133" align="center" height="1"><a href="mailto:irfan@cs.wustl.edu">Irfan
        Pyrali</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Implicit &amp; Explicit Binding</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.11</td>
      <td width="115" align="center" height="1">Due Oct. 13 2K</td>
      <td width="133" align="center" height="1"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Priority Banded Connections</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.12</td>
      <td width="115" align="center" height="1">Done</td>
      <td width="133" align="center" height="1"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Private Connection Policy</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.13</td>
      <td width="115" align="center" height="1">Due Oct. 13 2K</td>
      <td width="133" align="center" height="1"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Protocol Configuration</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.15</td>
      <td width="115" align="center" height="1">Done</td>
      <td width="133" align="center" height="1"><a href="mailto:marina@cs.wustl.edu">Marina
        Spivak</a></td>
    </tr>
  </table>
  </center>
</div>
<p>&nbsp;</p>
<p><b>Real-Time ORB - </b>Extension to the CORBA::ORB interface that provides operations to create and destroy other constituents of a RT ORB.</p>
<p><b>Real Time POA </b><b> - </b>RT extension of the traditional POA that
provides additional operation to support object level priority and
&quot;understand&quot; the RT Policies defined in ptc/99-05-03. This interface
is derived from the POA interface so it support all the semantics prescribed for
a non RT-POA. </p>
<p><b>CORBA Priority &amp; Priority Mappings - </b>RT-CORBA Priority have the
intent of shielding the user from the different priority scheme that a RTOS
might use, providing a uniform representation system wide. RT-CORBA Priority
Mappings take care of mapping RTCORBA::Priority into native priorities. Right
now to scheme are implemented and respectively the <i>Linear</i> and <i>Direct</i>.</p>
<p><b>Real-Time Current - </b> The RTCORBA::Current interface is derived from
CORBA::Current, and provide access to the CORBA Priority of the current thread.
Real Time CORBA Priority can be associated with the current thread by using this
interface.</p>
<p><b>Real-Time CORBA Priority Models - </b>Real-Time CORBA supports two models
for the coordination of priorities across a system, that let set the priority at
which a servant executes. This two different model are <i>Client Propagated
Priority Model</i> and <i>Server Declared Priority Model</i>.<i> </i></p>
<p><b>Priority Transforms - </b>Priority Transforms allow the application
designer to implement RT-CORBA system using priority models different from
either the Client Propagated or Server Declared. Priority Transforms are user
provided functions that map one RTCORBA::Priority value to another
RTCORBA::Priority value.</p>
<p><b>Mutex Interface - </b>Real-Time CORBA defines a Mutex interface, and two operation in the RTORB interface for creating and destroying such&nbsp; mutex. This mutex
should have the same priority inheritance scheme used by the ORB.</p>
<p><b>Thread Pools - </b>Real-Time CORBA define an interface for creating
Thread Pools, with or without lanes, and for creating Thread Pools Priorities.
Lanes are just sub-sets of threads at assigned different RTCORBA::Priority
values. The only feature that won't be supported is the <i>Request Buffering</i>
(see sec. 4.10.3).</p>
<p><b>Implicit &amp; Explicit Binding - </b>Provide control on when a binding is
made on a object reference. In particular a call to <font face="Courier New">validate_connection
</font>force the binding to an object reference to be made as <i>explicit
binding</i>.</p>
<p><b>&nbsp;Priority Banded Connections - </b>Real-Time CORBA defines priority
bands that are in turn used to serve request depending on the priority model
used by the target object.</p>
<p><b>Private Connection Policy - </b>This policy allows a client to obtain a
private transport connection which will not be shared with other client-server
connections.</p>
<p><b>Protocol Configuration - </b>Enables the selection and configuration of
the protocols on the client and server side of the ORB.</p>
<p align="center" style="margin-bottom: 5"><a name="Table 2 - Feature needed to Enable RT-CORBA">Table
2 - Feature needed to Enable RT-CORBA</a></p>
<div align="center">
  <center>
  <table border="1" width="663" height="122">
    <tr>
      <td width="236" align="center" height="19"><b>Feature</b></td>
      <td width="151" align="center" height="19"><b>Reference</b></td>
      <td width="115" align="center" height="19"><b>Status</b></td>
      <td width="133" align="center" height="19"><b>&nbsp;Contact</b></td>
    </tr>
    <tr>
      <td width="236" align="center" height="16">Collocation</td>
      <td width="151" align="center" height="16">Not yet available</td>
      <td width="115" align="center" height="16">Done</td>
      <td width="133" align="center" height="16"><a href="mailto:corsaro@cs.wustl.edu">Angelo
        Corsaro</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="14">Policy Streaming</td>
      <td width="151" align="center" height="14">ptc/99-05-03 orbos/98-05-05</td>
      <td width="115" align="center" height="14">Done</td>
      <td width="133" align="center" height="14"><a href="mailto:corsaro@cs.wustl.edu">Angelo
        Corsaro</a></td>
    </tr>
    <tr>
      <td width="236" align="center" height="1">Invocation Timeout</td>
      <td width="151" align="center" height="1">ptc/99-05-03 sec. 4.14 orbos/98-05-05</td>
      <td width="115" align="center" height="1">Done</td>
      <td width="133" align="center" height="1"><a href="mailto:coryan@ece.uci.edu">Carlos O'Ryan</a></td>
    </tr>
  </table>
  </center>
</div>
<p align="center">&nbsp;</p>
<p><b>Collocation - </b>A new collocation scheme has been designed and is in its
last stage of development. The collocation scheme has been changed because the
selection of the right proxy to use to perform a call, now has to be taken on a
call-per-call basis, to avoid interference between thread priorities. In
designing the new scheme we tried to reduce the memory footprint and the
overhead that the new scheme needs to introduce.</p>

<p><b>Policy Streaming - </b>Different policies defined by the RT-CORBA Spec.
need to be exposed to the client by&nbsp; embeddeding those&nbsp; into the IOR.
This facilities were added to those policies.</p>

<p><b>Invocation Timeout - </b>Allows the setting of timeout that expire if an invocation doesn't complete in a given amount of time.</p>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center" style="margin-bottom: 5"><a name="Table 3 - Issue to be shortly addressed">Table
3 - Issue to be shortly addressed</a></p>
<div align="center">
  <center>
  <table border="1" width="546" height="77">
    <tr>
      <td width="126" align="center" height="19"><b>Issue</b></td>
      <td width="152" align="center" height="19"><b>Status</b></td>
      <td width="89" align="center" height="19"><b>&nbsp;Contact</b></td>
    </tr>
    <tr>
      <td width="126" align="center" height="1">
        <p align="center">Factoring of TAO's Protocol Policies</td>
      <td width="152" align="center" height="1">???</td>
      <td width="89" align="center" height="1">???</td>
    </tr>
    <tr>
      <td width="126" align="center" height="1">Profile Mangement</td>
      <td width="152" align="center" height="1">???</td>
      <td width="89" align="center" height="1">???</td>
    </tr>
    <tr>
      <td width="126" align="center" height="1">RT CORBA Example/Test</td>
      <td width="152" align="center" height="1">???</td>
      <td width="89" align="center" height="1">???</td>
    </tr>
    <tr>
      <td width="126" align="center" height="1">RT-TAO Performance</td>
      <td width="152" align="center" height="1">???</td>
      <td width="89" align="center" height="1">???</td>
    </tr>
  </table>
  </center>
</div>
<p align="left">&nbsp;</p>
<p align="left"><b>Factoring of TAO's Protocol Policies -</b></p>
<p align="left"><b>Profile Management - </b>The Profile management is right now
quite nasty. The class interface are pretty counter-intuitive, and the code that
deal with profile needs to be redesigned and re-implemented.</p>
<p align="left"><b>RT CORBA Example Test - </b>Examples and Tests need to be
written to show how to use&nbsp; RT CORBA's features, and to massively test the
behavior of the new stuff.</p>
<p align="left"><b>Performance - </b>Performance tests needs to performed on TAO
to see the impact of the changes and to early individuate critical path and
bottlenecks.</p>
<p align="left">&nbsp;</p>

<h1 align="center"><a name="Release Notes">Release Notes</a></h1>
<p>We are currently working on implementing RT CORBA 1.0 specification in TAO. Our design is an extension of the <em>endpoint-per-priority</em> architecture mentioned in the <tt>Recently
Completed Work</tt> section below. In this design, codenamed <em>reactor-per-lane</em>, each threadpool lane owns a set of I/O resources, i.e., <tt>Reactor</tt>, <tt>Acceptor</tt>,
and <tt>Connector_Registry.</tt> Each request is serviced by a single thread without context switches, i.e., the same thread performs I/O and runs the servant code.
<p>Below there is a list of feature recently added to TAO, and in also a brief description of the main feature that characterize certain feature related to our implementation of
RT-CORBA.</p>
<ul>
 <li>
  <p style="line-height: 150%">Client Protocol Policy. 
 <li>
  <p style="line-height: 150%">Priority Banded Connections.
 <li>
  <p style="line-height: 150%">TAO's RTCORBA Documentation web pages.
 <li>
  <p style="line-height: 150%">POA Threadpools &amp; SERVER_DECLARED Priority Model.</li>
 <li>
  <p style="line-height: 150%">CLIENT_PROPAGATED Priority Model.</li>
 <li>
  <p style="line-height: 150%">Server Protocol Policy.
 <li>
  <p style="line-height: 150%">RTORB, RTCurrent and ProrityMappingManger interfaces.
 <li>
  <p style="line-height: 150%">Support for client-exposed policies.
 <li>
  <p style="line-height: 150%">All RTCORBA, Policy and POA interfaces converted to local.
 <li>
  <p style="line-height: 150%">Collocation-related classes are restructured to support RTCORBA.
 <li>
  <p style="line-height: 150%">Implemented Policy framework (defined in the Messaging specification, used in RT CORBA).
 <li>
  <p style="line-height: 150%">Added support for Real-time CORBA Priority and implemented two Priority Mappings: <tt>Linear</tt> and <tt>Direct</tt>.
 <li>
  <p style="line-height: 100%">Added support for end-to-end CORBA request priority preservation. This is achieved through <em>multiple listening endpoint</em> architecture, a.k.a. <em>endpoint-per-priority</em>,
  on the server and a Client Priority Policy on the client. Following is a brief description of how this is implemented.
  <p style="line-height: 100%">Server ORB uses multiple transport endpoints to accept connections from clients. Each transport endpoint has a priority, which is the priority of the
  thread(s) servicing the endpoint as well as all connections it accepts. When a server ORB creates an IOR for one of its objects, it embeds all of the server's listening endpoints
  along with their priorities into the object's IOR. Then, a client ORB selects the priority that best matches client's need (as specified by the Client Priority Policy) from those
  offered by the server, and uses the corresponding transport endpoint specified by the server to obtain the desired level of service.
  <p style="line-height: 100%">For more details and performance results for <em>endpoint-per-priority</em> architecture, see <a href="http://www.cs.wustl.edu/~marina/boeing.pdf">this
  paper.</a> See <tt>TAO/tao/TAO.pidl</tt> for Client Priority Policy interface definition, and <tt>TAO/tests/Endpoint_Per_Priority</tt> for example of using priority preservation
  in TAO.
  <p style="line-height: 100%">&nbsp;
 <li>
  <p style="line-height: 100%">Implemented reliable one-way requests, i.e., SyncScope Policy from the Messaging specification. This is relevant to RT CORBA because of the following
  feature: setting SyncScope Policy to SYNC_NONE enables buffering of one-way requests in the client ORB. Request buffering can be used to optimize message throughput, possibly at
  the expense of latency. ORB buffering behavior is controlled by the Buffering Constraint Policy, which is described next.
</ul>
<p style="line-height: 100%">&nbsp;
<ul>
 <li>
  <p style="line-height: 100%">Added support for buffered one-way and asynchronous requests in the client ORB. Buffering Constraint Policy gives users control over queueing and
  flushing of requests in the ORB. A combination of the following conditions for initiating buffer flush can be specified using this policy:
  <ul>
   <li>
    <p style="line-height: 100%">Timeout value expires.
   <li>
    <p style="line-height: 100%">Max byte count is exceeded.
   <li>
    <p style="line-height: 100%">Explicit flush by the user.
   <li>
    <p style="line-height: 100%">Max message count is exceeded, or
   <li>
    <p style="line-height: 100%">ORB shutdown.</li>
  </ul>
  <p style="line-height: 100%">Also supported are out-of-band requests, i.e., requests that bypass buffers and are delivered to the server immediately.
  <p style="line-height: 100%">Buffering Constraint Policy is a TAO-specific feature. See <tt>TAO/tao/TAO.pidl</tt> for policy interface definition and <tt>TAO/examples/Buffered_Oneways</tt>
  and <tt>TAO/examples/Buffered_AMI</tt> directories for its use. For motivation and performance of buffered one-ways see <a href="http://www.cs.wustl.edu/~marina/boeing.pdf">this
  paper.</a></p>
 </li>
</ul>
<p style="line-height: 100%">Known issues:
<ul>
 <li>
  <p style="line-height: 100%">Location forwarding does not work properly with <em>endpoint-per-priority</em> model.</li>
</ul>
<p style="line-height: 100%">Future work:
<ul>
 <li>
  <p style="line-height: 100%">Provide server-side RT CORBA implementation using a <em>queue-per-lane</em> approach. In this approach each threadpool lane owns a queue, while I/O
  resources are being shared among all the threadpool lanes of the same priority within the server. Strategize TAO to use either <em>queue-per-lane</em> or <em>reactor-per-lane</em>
  implementation, and compare the two.</li>
</ul>

</body>

</html>
